//
//  HMHomeViewModel.swift
//  WeiboTT
//
//  Created by 王嘉涛 on 2016/11/17.
//  Copyright © 2016年 王嘉涛. All rights reserved.
//

import UIKit

class HMHomeViewModel: NSObject {
    
    lazy var viewmodelArray : [HMStatusViewModel] = [HMStatusViewModel]()

    // 专门加载数据的方法 不负责和UI界面打交道
    func loadData(isPullup: Bool,finished: @escaping (Bool,Int) -> ()) {
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        
        var maxId: Int64 = 0
        var sinceId: Int64 = 0
        if isPullup {
            //上拉
            maxId = viewmodelArray.last?.status?.id ?? 0
            if maxId != 0 {
                maxId -= 1
            }
        } else {
            sinceId = viewmodelArray.first?.status?.id ?? 0
        }
        
        let parameters = ["access_token" : HMUserAccountViewModel.shared.access_token,
                          "max_id" : "\(maxId)",
            "since_id" : "\(sinceId)"]
        
        HMNetworkTools.shared.request(method: .GET, urlString: urlString, parameters: parameters) { (responseObject, error) in
            if error != nil {
                finished(false, 0)
                return
            }
            //解析数据 ,转换为模型数据
            //需要将Any? 转换为[String : Any]
            let dict = responseObject as! [String : Any]
            //尝试转换为字典类型的数组
            guard let array = dict["statuses"] as? [[String : Any]] else {
                //SVProgressHUD.showError(withStatus: errorTip)
                finished(false, 0)
                return
            }
            //print(array)
            //遍历数组 字典转模型
            var tempArray = [HMStatusViewModel]()
            //tempArray = NSArray.yy_modelArray(with: HMStatus.self, json: array) as! [HMStatus]
            for item in array {
                let viewmodel = HMStatusViewModel()
                let s = HMStatus()
                //调用对象的YYModel种扩充的对象方法传入字典 --> 模型数据
                s.yy_modelSet(with: item)
                //给viewmodel的status赋值
                viewmodel.status = s
                //添加到一个临时数组中  获取数据都是按页一次获取20条数据
                tempArray.append(viewmodel)
            }
            //执行成功的回调
            //如果是上拉加载更多数据就应该执行追加的操作
            if isPullup {
                //上拉加载更多数据 追加
                self.viewmodelArray = self.viewmodelArray + tempArray
            } else {
                //初次的时候直接赋值 或者 下拉刷新的时候 执行插入到前面操作
                self.viewmodelArray = tempArray + self.viewmodelArray
            }
            
            finished(true,tempArray.count)
        }
        
    }
}
